Endpoints de Smart Contract
Obtener Contrato
Retorna metadatos sobre un smart contract específico desplegado en una blockchain determinada. Esto se utiliza típicamente para inspeccionar la dirección del contrato, información de despliegue, versión y detalles del VM/runtime.
Solicitud
GET /blockchains/{blockchainId}/contracts/{address}
Para un node ejecutándose en https://tn-w-1.uledger.net/, la URL completa es:https://tn-w-1.uledger.net//blockchains/{blockchainId}/contracts/{address}
Parámetros de ruta
blockchainId– El identificador de la blockchain (uno de los valores retornados porGET /blockchains).address– La dirección del contrato on-chain a inspeccionar.
Respuesta
La respuesta contiene metadatos del contrato. Los campos exactos dependen del node y la configuración del VM, pero comúnmente incluyen:
blockchainId– ID de la blockchain donde está desplegado el contrato.address– Dirección del contrato.creator– Dirección que desplegó el contrato (si se registra).deploymentTxId– ID de la transaction que creó el contrato.codeHash– Hash del código o artefacto del contrato.vmType– Tipo de VM/runtime del contrato.version– Versión del contrato, si el versionado está habilitado.status– Estado actual del contrato (ej.ACTIVE,PAUSED,UPGRADED).metadata– Metadatos adicionales opcionales definidos por su despliegue.
Ejemplo de respuesta
{
"blockchainId": "{blockchainId}",
"address": "{contractAddress}",
"creator": "{creatorAddress}",
"deploymentTxId": "{deploymentTransactionId}",
"codeHash": "c5b21c4e8f6c4d7e8f3d...",
"vmType": "uledgervm-v1",
"version": 3,
"status": "ACTIVE",
"metadata": {
"name": "ExampleContract",
"description": "Demo contract used for documentation",
"tags": ["demo", "test"]
}
}
- cURL
curl -X GET -L "https://tn-w-1.uledger.net//blockchains/{blockchainId}/contracts/{address}" | jq
// Using native fetch (Node 18+)
const blockchainId = "{blockchainId}";
const address = "{contractAddress}";
const res = await fetch(
`https://tn-w-1.uledger.net//blockchains/${blockchainId}/contracts/${address}`
);
if (!res.ok) {
throw new Error(`Request failed with status ${res.status}`);
}
const contract = await res.json();
console.log("Contract address:", contract.address);
console.log("Status:", contract.status);
console.log("VM type:", contract.vmType);
import requests
blockchain_id = "{blockchainId}"
address = "{contractAddress}"
resp = requests.get(
f"https://tn-w-1.uledger.net//blockchains/{blockchain_id}/contracts/{address}"
)
resp.raise_for_status()
contract = resp.json()
print("Contract address:", contract["address"])
print("Status:", contract["status"])
print("VM type:", contract["vmType"])
Obtener Estado del Contrato
Retorna la instantánea del estado actual de un smart contract en una blockchain determinada. La estructura del estado es definida por el contrato y típicamente se expone como un objeto JSON o mapa de clave-valor.
Solicitud
GET /blockchains/{blockchainId}/contracts/{address}/state
Para un node ejecutándose en http://my.node1.uledger.io, la URL completa es:http://my.node1.uledger.io/blockchains/{blockchainId}/contracts/{address}/state
Parámetros de ruta
blockchainId– El identificador de la blockchain.address– La dirección del contrato cuyo estado desea inspeccionar.
Respuesta
La respuesta contiene el último estado on-chain del contrato. La estructura exacta está determinada por el contrato, pero un patrón típico es:
blockchainId– ID de la cadena donde reside el contrato.address– Dirección del contrato.version– Número de versión/estado actual del contrato.state– Objeto JSON que representa el estado del contrato.
Ejemplo de respuesta
{
"blockchainId": "{blockchainId}",
"address": "{contractAddress}",
"version": 3,
"state": {
"owner": "{ownerAddress}",
"totalSupply": "1000000",
"balances": {
"{ownerAddress}": "750000",
"{otherAddress}": "250000"
},
"paused": false
}
}
- cURL
- Node.js
- Python
curl -X GET -L "http://my.node1.uledger.io/blockchains/{blockchainId}/contracts/{address}/state" | jq
// Using native fetch (Node 18+)
const blockchainId = "{blockchainId}";
const address = "{contractAddress}";
const res = await fetch(
`http://my.node1.uledger.io/blockchains/${blockchainId}/contracts/${address}/state`
);
if (!res.ok) {
throw new Error(`Request failed with status ${res.status}`);
}
const snapshot = await res.json();
console.log("State version:", snapshot.version);
console.log("Contract owner:", snapshot.state.owner);
import requests
blockchain_id = "{blockchainId}"
address = "{contractAddress}"
resp = requests.get(
f"http://my.node1.uledger.io/blockchains/{blockchain_id}/contracts/{address}/state"
)
resp.raise_for_status()
snapshot = resp.json()
print("State version:", snapshot["version"])
print("Contract owner:", snapshot["state"]["owner"])
Obtener Traza / Logs del Contrato
Retorna la traza de ejecución o los logs de una llamada específica al contrato, identificada por la transaction que invocó el contrato. Esto es útil para depuración y observación de eventos emitidos.
Solicitud
GET /blockchains/{blockchainId}/contracts/{address}/trace/{transactionId}
Para un node ejecutándose en http://my.node1.uledger.io, la URL completa es:http://my.node1.uledger.io/blockchains/{blockchainId}/contracts/{address}/trace/{transactionId}
Parámetros de ruta
blockchainId– El identificador de la blockchain.address– Dirección del contrato que procesó la transaction.transactionId– La transaction cuya traza de ejecución del contrato desea obtener.
Respuesta
El formato de la respuesta depende de la configuración de su node, pero una estructura típica es:
blockchainId,address,transactionId– Contexto de la traza.events– Array de eventos del contrato/entradas de log emitidas durante la ejecución.trace– Información opcional de traza de ejecución de bajo nivel.
Ejemplo de respuesta
{
"blockchainId": "{blockchainId}",
"address": "{contractAddress}",
"transactionId": "{transactionId}",
"events": [
{
"name": "Transfer",
"timestamp": "2025-11-11T20:25:01Z",
"indexedArgs": {
"from": "{fromAddress}",
"to": "{toAddress}"
},
"data": {
"amount": "1000"
}
},
{
"name": "BalanceUpdated",
"timestamp": "2025-11-11T20:25:01Z",
"data": {
"owner": "{toAddress}",
"newBalance": "26000"
}
}
],
"trace": {
"steps": 42,
"gasUsed": 12345
}
}
- cURL
- Node.js
- Python
curl -X GET -L "http://my.node1.uledger.io/blockchains/{blockchainId}/contracts/{address}/trace/{transactionId}" | jq
// Using native fetch (Node 18+)
const blockchainId = "{blockchainId}";
const address = "{contractAddress}";
const transactionId = "{transactionId}";
const res = await fetch(
`http://my.node1.uledger.io/blockchains/${blockchainId}/contracts/${address}/trace/${transactionId}`
);
if (!res.ok) {
throw new Error(`Request failed with status ${res.status}`);
}
const trace = await res.json();
console.log("Events:", trace.events.length);
console.log("First event name:", trace.events[0]?.name);
import requests
blockchain_id = "{blockchainId}"
address = "{contractAddress}"
transaction_id = "{transactionId}"
resp = requests.get(
f"http://my.node1.uledger.io/blockchains/{blockchain_id}/contracts/{address}/trace/{transaction_id}"
)
resp.raise_for_status()
trace = resp.json()
print("Events:", len(trace["events"]))
if trace["events"]:
print("First event name:", trace["events"][0]["name"])